/**
 * Projeto Myou - Disciplina: Sistemas de Informação I
 * @author Ronycley Gonçalves Agra
 * @since 23/09/2011
 */
package myou.classes;

import java.util.ArrayList;
import java.util.List;
/**
 * Classe que encapsula o comportamento de um tópico
 * @author Ronycley Gonçalves Agra
 * @version 1.0
 * @since Milestone 1 23/09/2011 
 * @see myou.classes.Sistema
 * @see myou.classes.Interesse
 * @see myou.classes.Emprestimo
 * @see myou.classes.Mensagem
 * @see myou.classes.Item
 * @see myou.classes.RequisicaoDeAmizade
 * @see myou.classes.RequisicaoDeEmprestimo
 * @see myou.classes.Sessao
 * @see myou.classes.Usuario
 */
public class Topico {

	private String id;
	private String assunto;
	private String tipo;
	private List<Usuario> usuariosParticipantes;
	private List<Mensagem> mensagens;
	
	/**
	 * Construtor
	 * @param assunto O assunto do tópico
	 * @param tipo O tipo do Tópico ("negociacao" ou "offtopic"
	 * @param usuariosParticipantes A lista de usuarios envolvidas no tópico
	 */
	public Topico(String assunto, String tipo,
			List<Usuario> usuariosParticipantes) {
		this.id = this.generateId();
		this.assunto = assunto;
		this.tipo = tipo;
		this.usuariosParticipantes = usuariosParticipantes;
		this.mensagens = new ArrayList<Mensagem>();
	}
	
	/**
	 * 
	 * @param assunto O assunto do tópico
	 * @param tipo O tipo do Tópico ("negociacao" ou "offtopic"
	 * @param usuario1 O primeiro usuário envolvido no tópico
	 * @param usuario2 O segundo usuário envolvido no tópico
	 */
	public Topico(String assunto, String tipo,
			Usuario usuario1, Usuario usuario2) {
		this.id = this.generateId();
		this.assunto = assunto;
		this.tipo = tipo;
		this.usuariosParticipantes = new ArrayList<Usuario>();
		this.usuariosParticipantes.add(usuario1);
		this.usuariosParticipantes.add(usuario2);
		this.mensagens = new ArrayList<Mensagem>();
	}
	
	/**
	 * Retorna o id do tópico
	 * @return id O id do tópico
	 */
	public String getId() {
		return this.id;
	}
	
	/**
	 * Retorna o assunto do tópico
	 * @return assunto o assunto do tópico
	 */
	public String getAssunto() {
		return this.assunto;
	}
	
	/**
	 * Modifica o assunto do tópico
	 * @param assunto O novo assunto do tópico
	 */
	public void setAssunto(String assunto) {
		this.assunto = assunto;
	}
	
	/**
	 * Retorna o tipo do tópico
	 * @return O tipo do tópico
	 */
	public String getTipo() {
		return this.tipo;
	}
	
	/**
	 * Modifica o tipo do tópico
	 * @param tipo O novo tipo do tópico
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	/**
	 * Retorna a lista de usuários participantes do tópico
	 * @return A lista de usuários participantes do tópico
	 */
	public List<Usuario> getUsuariosParticipantes() {
		return this.usuariosParticipantes;
	}
	
	/**
	 * Modifica os usuários partucipantes do tópcio
	 * @param usuariosParticipantes A lista com os novos usuários 
	 * partiipantes do tópico
	 */
	public void setUsuariosParticipantes(List<Usuario> usuariosParticipantes) {
		this.usuariosParticipantes = usuariosParticipantes;
	}
	
	/**
	 * Retorna a lista das mensagens do tópico
	 * @return A lista das mensagens do tópico
	 */
	public List<Mensagem> getMensagens() {
		return this.mensagens;
	}

	/**
	 * Modifica as mensagens do tópico
	 * @param mensagens A lista com as novas mensagens do tópico
	 */
	public void setMensagens(List<Mensagem> mensagens) {
		this.mensagens = mensagens;
	}
	
	/**
	 * Adiciona uma mensagem ao tópico
	 * @param usuarioOrigem O usuário origem da mensagem
	 * @param usuarioDestino O usuário destino da mensagem
	 * @param conteudo O conteúdo da mensagem
	 */
	public void addMensagem(Usuario usuarioOrigem, Usuario usuarioDestino, String conteudo){
		this.mensagens.add(new Mensagem(usuarioOrigem,usuarioDestino,conteudo));
	}

	/**
	 * Adiciona uma mensagem ao tópico
	 * @param mensagem A mensagem a ser adicionada ao tópico
	 */
	public void addMensagem(Mensagem mensagem) {
		this.mensagens.add(mensagem);
	}
	
	/**
	 * Gera aleatoriamente o id para o tópico
	 * @return O id gerado para o tópico
	 */
	private String generateId(){
		int parteRandomica = (int)(Math.random()* 100)+(int)(Math.random()* 10+(int)(Math.random()* 1000));
		return (new Integer(parteRandomica)).toString();
	}
}
